package cn.lg.soar.system.biz.modules.monitor.service;


import cn.lg.soar.common.util.current.UserContext;
import cn.lg.soar.common.util.token.LoginInfo;
import cn.lg.soar.system.api.model.TokenInfoDTO;
import cn.lg.soar.system.biz.modules.monitor.entity.RefreshToken;
import cn.lg.soar.system.biz.modules.monitor.model.RefreshTokenRecord;
import com.baomidou.mybatisplus.extension.service.IService;

import java.io.Serializable;

/**
 *
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IRefreshTokenService extends IService<RefreshToken> {

    /**
     * 创建token
     * @param loginInfo
     * @param expires
     * @return
     */
    TokenInfoDTO create(LoginInfo loginInfo, long expires);

    /**
     * 创建token
     * @param loginInfo
     * @param rememberMe
     * @return
     */
    TokenInfoDTO create(LoginInfo loginInfo, boolean rememberMe);

    /**
     * 创建token
     * @param userId
     * @param expires
     * @return
     */
    TokenInfoDTO create(Long userId, long expires);

    /**
     * 创建token
     * @param userId
     * @param rememberMe
     * @return
     */
    TokenInfoDTO create(Long userId, boolean rememberMe);

    /**
     * 刷新token
     * @param refreshToken
     * @return
     */
    TokenInfoDTO refresh(String refreshToken);

    /**
     * 切换租户
     * @param tokenId
     * @param tenantId
     * @return
     */
    TokenInfoDTO changeTenant(long tokenId, int tenantId);

    /**
     * 验证刷新token
     * @param refreshToken
     * @return
     */
    RefreshTokenRecord verify(String refreshToken);

    /**
     * 清除token
     */
    default void removeCurrent() {
        removeById(UserContext.getUser().getTokenId());
    }

    /**
     * 根据用户id删除 RefreshToken
     * @param userId
     * @return
     */
    boolean removeByUserId(Serializable userId);

    /**
     * 根据用户id和设备类型删除 RefreshToken
     * @param userId
     * @param clientType
     * @return
     */
    boolean removeByUserId(Serializable userId, Integer clientType);

}
